package com.mysiteforme.admin.util;

import com.google.zxing.*;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import org.springframework.beans.factory.annotation.Autowired;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;


/**
 * 生成二维码 工具类
 */
public class QRCodeUtils {
	
	@Autowired
    HttpServletRequest request; //这里可以获取到request
	public static void main(String[] args) throws Exception {  
        File testEncode = testEncode("d://","https://www.baidu.com","image.jpg");
        //testDecode(); 
    }  
  
    /** 
     * 生成二维码 
     *  
     * @throws WriterException 
     * @throws IOException 
     */  
    public static File testEncode(String filePath,String content,String fileName) throws WriterException, IOException {
        int width = 300; // 图像宽度  
        int height = 300; // 图像高度  
        String format = "png";// 图像类型  
        Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
        BitMatrix bitMatrix = new MultiFormatWriter().encode(content,
                BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵
        Path path = FileSystems.getDefault().getPath(filePath, fileName);
        MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像
        File file = path.toFile();
//        BufferedImage image = ImageIO.read(file);
        System.out.println("输出成功.");  
        return file;
    }  
  
    /** 
     * 解析二维码 
     */  
    public static Result testDecode(String path) {  
        BufferedImage image;  
        try {  
            image = ImageIO.read(new File(path));  
            LuminanceSource source = new BufferedImageLuminanceSource(image);  
            Binarizer binarizer = new HybridBinarizer(source);  
            BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);  
            Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();  
            hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");  
            Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码  
            System.out.println("图片中内容：  ");  
            System.out.println("author： " + result.getText());  
            System.out.println("图片中格式：  ");  
            System.out.println("encode： " + result.getBarcodeFormat()); 
            return result;
           
        } catch (IOException e) {  
            e.printStackTrace(); 
            return null;
        } catch (NotFoundException e) {  
            e.printStackTrace();  
            return null;
        }  
        
    }  

} 